package map_;

import java.util.HashMap;
import java.util.Objects;

public class HashMapSource {
    public static void main(String[] args) {
//        分析扩容机制与putVal(),resize()
        HashMap hashMap = new HashMap();
        hashMap.put("1","Java");
        hashMap.put("2","Android");
        hashMap.put("1","kotlin");
        System.out.println(hashMap);//{1=kotlin, 2=Android}
        /**
         * 1.构造函数 new HashMap()
         *   初始化加载因子loadFactor
         *   此时并没有给table分配空间
         *   HashMap$Node table[]=null;
         *
         *2.p = tab[i = (n - 1) & hash]如何理解？索引 i 是如何算出来的呢？
         *  key对应的hash值与tab的长度减一即（n-1）进行相与，
         *  如果n的值刚好为2的任何次幂，此时与n-1相与等价于对n取余
         */


        //todo 触发扩容的链表长度临界值是8还是9
        hashMap.clear();
        for(int i=1;i<14;++i){
            hashMap.put(new HashA(i),i);
        }
        System.out.println(hashMap);
    }
}
class HashA {
    private int i;
    public HashA(int i) {
        this.i=i;
    }


    @Override
    public int hashCode() {
        return 100;
    }
}
